 #ifndef SRC_YCBLF_H
 #define SRC_YCBLF_H
 #include <vector>

 #ifdef __cplusplus
 extern "C" {
 #endif
 #include <stdint.h>

 #define CAN_FRAME_DATA              0x04u        //回注数据必须配置
 #define CAN_ID_EXT                  0x01u        //扩展帧
 #define CAN_ID_STD                  0x02u        //标准帧    扩展帧和标准帧二选一配置
 #define CAN_FRAME_REMOTE            0x08u        //远程帧，CANFD不支持远程帧
 #define CAN_EN_FD                   0x10u        //CANFD使能
 #define CAN_EN_BRS                  0x20u        //依赖于CAN_EN_FD，若未配置CAN_EN_FD则不能配置此项

 typedef struct CanData_t {
     uint8_t channel;
     uint8_t type_flag;
     uint64_t time;
     uint32_t id;
     uint8_t data_len;
     uint8_t data[64];
 }
 CanData;

 typedef struct FlexrayData_t {
     uint8_t channel;				// channel no
     uint8_t  channel_mask;          // 0: reserved, 1: A, 2: B, 3: AB
     int32_t message_id;				// 报文ID
     std::string message_name;		// 报文名称
     uint16_t byte_count;			// payload length in bytes
     int32_t data_bytes;					// actual data bytes
     uint8_t  cycle_number;          // cycle number: 0~63
     uint32_t tag;
     uint32_t frame_flags;           // bit 0~22
     uint32_t frame_crc;
     uint16_t headerCrc1;			// Header CRC FlexRay channel 1 (A)
     uint16_t headerCrc2;			// Header CRC FlexRay channel 2 (B)
     long long time;					// 报文时间
     std::vector<uint8_t> data;		// 报文数据
 } FlexrayData;

 /*
     * 以下API为存储CAN/FD数据为blf文件接口，调用顺序：
     * 1、开启blf文件,ACStartWriteBlf();
     * 2、将can或canfd数据写入到blf文件中,ACBlfWriteCanData(); ACBlfWriteCanFdData();
     * 3、关闭blf文件,ACEndWriteBlf();
 */
 /// 开启blf文件
 /// - [IN] file_name : blf文件路径即文件名；eg:/home/user/Download/channel0_bus.blf
 /// - [RETURN] 成功返回 EC_OK 失败返回EC_NOK
 int32_t ACStartWriteBlf(const char* file_name);

 /// 写入can数据到blf文件
 /// - [IN] frame : CAN/FD数据
 /// - [RETURN] 成功返回 EC_OK 失败返回EC_NOK
 int32_t ACBlfWriteCanData(CanData frame);

 /// 写入canfd数据到blf文件
 /// - [IN] frame : CAN/FD数据
 /// - [RETURN] 成功返回 EC_OK 失败返回EC_NOK
 int32_t ACBlfWriteCanFdData(CanData frame);

 int32_t ACBlfWriteFlexrayData(FlexrayData frame);

bool ACBlfFileStat();

 /// 关闭blf文件
 /// - [RETURN] 成功返回 EC_OK 失败返回EC_NOK
 int32_t ACEndWriteBlf();

 #ifdef __cplusplus
 }
 #endif

 #endif //SRC_YCBLF_H